package unidad;

/**
 * Esta clase representa una unidad dentro del juego. La misma puede ser tanto una torre
 * como un enemigo. Cada una tiene una velocidad de ataque que representa la cantidad de veces
 * que puede golpear por segundo, una cantidad determinada de puntos de vida, probocando la destrucci�n
 * de la unidad cuando la misma llega a cero, un ataque que representa cuanta vida puede sacar a
 * otra unidad y un n�mero de identificaci�n 'ID' para propositos de reconocimiento.
 */
public abstract class Unidad {
	//Atributos de instancia
	protected int velDeAtaque;
	protected int hp;
	protected int ataque;
	protected int id;
	protected int posX, posY;
	protected boolean bloqueado;
	protected int movimientoEnTablero;
	
	//Consultas
	public int velocidadDeAtaque()
	{
		return velDeAtaque;
	}
	
	public abstract int puntosPorMorir();
	
	public abstract int movEnTablero();
	
	public int vida()
	{
		return hp;
	}
	
	public int id()
	{
		return id;
	}
	
	//Comandos
	/**
	 * M�todo que es utilizado cuando una unidad ataca a otra. Este m�todo es implementado
	 * en las clases que extienden a Unidad.
	 * @param unidad - Unidad que ser� atacada.
	 */
	public abstract void atacar(Unidad unidad);
	
	/**
	 * Este comando modifica la vida de una unidad disminuyendola con la cantidad pasada
	 * como par�metro. Si la cantidad es mayor a la vida de la unidad, la misma queda
	 * por defecto en cero.
	 * @param cantidad - Da�o realizado a la unidad.
	 */
	public void decrementarVida(int cantidad)
	{
		hp -= cantidad;
		if(hp < 0) 
			hp = 0;
	}
	
	public void serAtacado(Unidad unidad)
	{
		
	}
	
	
	public int obtPosicionEnX()
	{
		return posX;
	}
	
	public void setPosicionEnX(int posX)
	{
		this.posX = posX;
	}
	
	public int obtPosicionEnY()
	{
		return posY;
	}
	
	public void setPosicionEnY(int posY)
	{
		this.posX = posY;
	}
	
	public boolean bloqueado() {return(bloqueado);}
	
	public void desbloquear(){bloqueado = false;}
	
	public void bloquear(){bloqueado = true;}
	
}
